from bs4 import BeautifulSoup

doc2_html = "<html><body><p>contentone</p><b>contenttwo</b></body></html>"
soup = BeautifulSoup(doc2_html, "lxml")


# contents 属性可以将 tag 的子节点以列表的形式输出。
print(soup.contents)
print(soup.contents[0].contents)
print(soup.contents[0].contents[0].contents)

# 输出结果如下。
# [ <html><body><p>contentone</p><b>contenttwo</b></body></html>]
# [ <body><p>contentone</p><b>contenttwo</b></body>]
# [ <p>contentone</p>, <b>contenttwo</b>]

# children 生成器可以对 tag 的子节点进行循环。
for child in soup.children:
    print(child)

# 输出结果如下。
# <html><body><p>contentone</p><b>contenttwo</b></body></html>

# parent 属性可以获取某个元素的父节点。
tag_p = soup.p
tag_p_parent = tag_p.parent
print(tag_p_parent)

# 输出结果如下
# <body><p>contentone</p><b>contenttwo</b></body>


# next_sibling 和 previous_sibling 属性可以查询兄弟节点。
tag_p_next_sibling = soup.p.next_sibling
tag_b_previous_sibling = soup.b.previous_sibling

print(tag_p_next_sibling)
print(tag_b_previous_sibling)

# 输出结果如下。
# <b>contenttwo</b>
# <p>contentone</p>